\documentclass{article}
\usepackage[UTF8]{ctex}
\usepackage{amssymb}
\usepackage{graphicx}

\title{项目作业报告}
\author{姓名：胡宇梦\quad\quad\quad 学号：3210103435}
\date{\today}
\begin{document}
\maketitle


\section{项目设计思路}
1、使用json file格式进行参数的输入

2、对pp-Form实现了分段线性$\mathbb{S}_1^0$插值和三次样条$\mathbb{S}_3^2$样条插值，支持complete、D2、natrual三种边界条件

3、实现了cubic cardinal B样条插值和 quadratic cardinal B样条插值

4、使用python来绘图


\section{项目构建注意事项}
1、使用Makefile文件来构建项目，通过make命令可以运行cpp代码，通过make report命令来生成报告pdf，通过make plot命令来绘图

2、需要跑通cpp代码，需要配置运行环境，需要安装nlohmann写的json库来解析json文件以及eigen3/Eigen库来求解线性方程组，我将其设置为了环境变量一劳永逸

\section{ProblemA}
1、边界条件为：complete
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_Com.jpg}\par
  \title{边界条件为：complete的插值曲线}
  \end{center}
  
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_Com_error.jpg}\par
  \title{边界条件为：Complete的误差曲线}
  \end{center}

分析：

（1）并未出现大范围震荡的Runge 现象

（2） MaxNorm Error（n=6）=0.42170；MaxNorm Error（n=11）=0.02197；MaxNorm Error（n=21）=0.00318；MaxNorm Error（n=41）=0.00028；MaxNorm Error（n=81）=0.00002；

（3）除了N=6，其他拟合效果都较为满意\\

2、边界条件为：D2
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_D2.jpg}\par
  \title{边界条件为：D2的插值曲线}
  \end{center}
  
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_D2_error.jpg}\par
  \title{边界条件为：D2的误差曲线}
  \end{center}

分析：

（1）并未出现大范围震荡的Runge 现象

（2） MaxNorm Error（n=6）=0.42370；MaxNorm Error（n=11）=0.02197；MaxNorm Error（n=21）=0.00318；MaxNorm Error（n=41）=0.00028；MaxNorm Error（n=81）=0.00002；

（3）除了N=6，其他拟合效果都较为满意\\

3、边界条件为：Natrual
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_Nat.jpg}\par
  \title{边界条件为：Natrual的插值曲线}
  \end{center}
  
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_Nat_error.jpg}\par
  \title{边界条件为：Natrual的误差曲线}
  \end{center}

分析：

（1）并未出现大范围震荡的Runge 现象

（2） MaxNorm Error（n=6）=0.42348；MaxNorm Error（n=11）=0.02197；MaxNorm Error（n=21）=0.00318；MaxNorm Error（n=41）=0.00028；MaxNorm Error（n=81）=0.00002；

（3）除了N=6，其他拟合效果都较为满意\\

4、收敛阶分析：
以complete边界条件为例，作出ln（error）和ln（1/(N+1)）的关系曲线，并用直线拟合
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_A_ConvergenceRate.png}\par
  \end{center}
由样条的误差估计\[error=|f(x)-s(x)|\le\frac{5}{384}h^4M,h=\max|x_{i+1}-x_i|\]
则可以发现误差err关于h是四阶收敛率\\
由上图可知log(err)关于log(h)的斜率大概为3.5,故为4阶收敛率\\

\section{ProblemB}

二次三次B样条插值，曲线如下：
  \begin{center}
  \includegraphics[scale=0.5]{Data/result_C.jpg}\par
  \end{center}
误差曲线如下：
\begin{center}
  \includegraphics[scale=0.5]{Data/result_C_error.jpg}\par
  \end{center}
在点x = −3.5,−3,−0.5, 0, 0.5, 3, 3.5 处的误差值为：
x =-3.5:
cubic: 0.000789971                                            quad : 0

x =-3:
cubic: 1.38778e-17                                            quad : 0.00141838

x =-0.5:
cubic: 0.0205306                                            quad : 1.11022e-16

x =0:
cubic: 0                                            quad : 0.120238

x =0.5:
cubic: 0.0205306                                            quad : 1.11022e-16

x =3:
cubic: 0                                            quad : 0.00141838

x =3.5:
cubic: 0.000789971                                            quad : 0


分析：

（1）在两条样条曲线的插值点出的误差为0

（2）三次样条拟合误差比二次B样条明显更小，拟合更准确






\section{ProblemE}

（1）拟合心型曲线，由于心型曲线曲率较大的原因，宜采用三次B样条插值的方法，三次B样条插值的方法会好于其他的方法

（2）插值点越多，则拟合效果越好，结果越精确

（3）边界条件宜采用Natrual

以下是绘制的心型图：
\begin{center}
  \includegraphics[scale=0.8]{Data/result_E.jpg}\par
  \end{center}




\end{document}